High speed digital signal processing (DSP) in communication system applications requires low power implementations of high performance DSP capabilities, especially for hand-held devices. Certain processes such as channel coding and error correction are usually implemented to improve performance. High speed modems usually process signals as vectors, i.e. complex numbers. DSP processors should therefore be most efficient at processing complex numbers.
The majority of digital signal processors are integer machines as opposed to floating point because integer machines require less hardware. An integer machine is generally considered less accurate because of its reduced dynamic range and the difficulty in dealing with functions which are likely to exceed its dynamic range (such as reciprocals). In order to support such processes, special functions are required which can implement these processes efficiently with a minimum of software.
Special functions may include normalization of an array of complex numbers, normalization of a complex number, magnitude of a complex number, square root, reciprocal square root, and reciprocal. A particular processing application may require unique combinations of special functions. A need exists in a complex arithmetic processor and digital signal processor for special functions which support channel coding and error correction. These functions are polynomial divide, Hamming distance, data parsing and combining. Polynomial divide is used for generating cyclic (PN) codes which are used for spreading data over a wider bandwidth. This technique provides the receiver with enough data diversity to correct errors and therefore improve sensitivity. Polynomial divide is also used for error detection and correction by generating a remainder which is used as a check word for a block of data. Hamming distance is the number of bits that are different between two digital words. The Hamming distance function is frequently used in trellis coding where a particular set of data is chosen because it has the lowest accumulative error.
Pseudo-random data (PN code) or encrypted data is usually generated in serial bit streams. Some applications require that it be accumulated and parsed into random code vectors. A high speed data parser and combiner can be used to interleave and deinterleave data. This technique is used to spread data over time to make it more immune to burst errors and therefore easier to correct.
A need exists also for special functions which support complex arithmetic such as magnitude of a complex number and complex normalization. The magnitude function is the Pythagorean theorem (square root of the sum of squares). This function converts a vector quantity to a scaler so that it can be compared with other vectors. Normalization is normally performed to improve accuracy in floating point systems. Normalization involves keeping the mantissa as large as possible by shifting the mantissa and adjusting the exponent.
An integer machine uses block scale floating point normalization to improve accuracy. In an integer machine there are only mantissas and no exponents. The exponents of all the numbers are assumed to be identical, meaning individual numbers cannot be scaled independently. Functions which perform the magnitude, normalization and averaging functions are square root, reciprocal square root and reciprocal. These functions are implemented through recursive algorithms which start with an initial estimate from a normalized mantissa.
Current or existing arithmetic logic units (ALUs) are neither a capable nor efficient means of providing the special functions required in the complex arithmetic processor for the digital communications applications which are contemplated. Most ALUs only provide simple logic functions such as SHIFT, OR, and AND which are combined into more complex functions such as PARSE and COMBINE through multiple software instructions. It is desirable to combine these basic elements in hardware necessitating only one instruction per PARSE operation instead of three. It is also desirable that similar efficiencies be realized in polynomial divide and Hamming distance calculations. Moreover, functions such as square root and reciprocal are not available on most integer machines.
What is needed is a special functions ALU capable of executing the special functions listed above in one instruction. Such an ALU would also desirably perform normal ALU functions such as NOT, NEGATE, OR, XOR, AND, ADD and SHIFT. It would be advantageous if the higher level special functions could be computed is one instruction and if the ALU could generate exponents for the integer outputs so that accuracy would not be lost while using the results of square root, reciprocal square root, or reciprocal.